﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace AvaProvi
{
    [Serializable]
    public class clsInmueble_CRN:clsEstado,IControlEstados
    {
        private string strRegimenDePropiedad;

        #region propiedades de clase
        public int IDInmueble { get; set; }
        public string TipoInmueble { get; set; }
        public string ClaseInmueble { get; set; }
        public string Estado { get; set; }
        public int NoDeRecamaras { get; set; }
        public int NoDeNiveles { get; set; }
        public string CUVivienda { get; set; }
        public string NoPaqueteInfonavit { get; set; }
        public string NoDeCedulaInfonavit { get; set; }
        public string Constructor { get; set; }
        public double Longitud { get; set; }
        public double Latitud { get; set; }
        public double Altitud { get; set; }
        public string NombreConjunto { get; set; }
        public string CuentaPredial { get; set; }
        public string ClaveCatastral { get; set; }
        public string CuentaAgua { get; set; }
        public int NoDeVivienda { get; set; }
        public string RegimenDePropiedad
        {
            get { return strRegimenDePropiedad; }
            set
            {
                strRegimenDePropiedad = value;
                if ((this.Terreno != null) && (strRegimenDePropiedad != "Condominial"))
                {
                    if (this.Terreno.Construccion != null)
                    {
                        this.Terreno.Construccion.DescAComunes = string.Empty;
                        this.Terreno.Construccion.DescAPrivativas = string.Empty;
                        this.Terreno.Construccion.GradoTAComunes = 0;
                        this.Terreno.Construccion.SupAComunes = 0;
                        this.Terreno.Construccion.SupAPrivativas = 0;
                        this.Terreno.Construccion.AComunesTerminadas = false;
                        this.Terreno.Medidas.ColindanciasPrivativas = string.Empty;
                    }
                }
            }
        }
        public string ClasificacionGral { get; set; }
        public clsDireccion_CRN UbicacionDelInmueble { get; set; }
        public clsDireccion_CRN SegundaUbicacion { get; set; }
        public clsPersona_CRN Propietario { get; set; }
        public clsDireccion_CRN DireccionPropietario { get; set; }
        public clsAvaluo_CRN Avaluo { get; set; }
        public clsEntorno_CRN Entorno { get; set; }
        public clsInfraestructura_CRN  Infraestructura { get; set; }
        public clsTerreno_CRN Terreno { get; set; }
        public clsZonaDeRiesgo_CRN  ZonasDeRiesgo { get; set; }
        public clsDescripcionGeneral_CRN DescripcionGeneral { get; set; }
        public clsObraNegra_CRN ObraNegra { get; set; }
        public clsRevestimiento_CRN Revestimiento { get; set; }
        public clsInstalacion_CRN Instalaciones { get; set; }
        public clsEnfoqueDeMercado_CRN EnfoqueDeMercado { get; set; }
        public clsFotos Fotos { get; set; }
        public clsDictamen_CRN Dictamen { get; set; }

        #region Equipamento

        public clsEquipamento_CRN EquipamentoIglesia { get; set; }
        public clsEquipamento_CRN EquipamentoMercados { get; set; }
        public clsEquipamento_CRN EquipamentoPlazasPub { get; set; }
        public clsEquipamento_CRN PlazasJardines { get; set; }
        public clsEquipamento_CRN Escuelas { get; set; }
        public clsEquipamento_CRN Hospitales { get; set; }
        public clsEquipamento_CRN Bancos { get; set; }
        public clsEquipamento_CRN EstacionTransporte { get; set; }

        #endregion
        #endregion


        public clsInmueble_CRN(clsAvaluo_CRN  objAvaluo)
            : base()
        {
            try
            {
                this.Altitud = 0;
                this.Avaluo = objAvaluo;
                this.ClaseInmueble = string.Empty;
                this.ClasificacionGral = string.Empty;
                this.ClaveCatastral = string.Empty;
                this.Constructor = string.Empty;
                this.CuentaAgua = string.Empty;
                this.CuentaPredial = string.Empty;
                this.CUVivienda = string.Empty;
                this.DescripcionGeneral = new clsDescripcionGeneral_CRN(this);
                this.Dictamen = new clsDictamen_CRN(this);
                this.DireccionPropietario = new clsDireccion_CRN("PRO", objAvaluo);
                this.EnfoqueDeMercado = new clsEnfoqueDeMercado_CRN(this);
                this.Entorno = new clsEntorno_CRN(this);
                this.Estado = string.Empty;
                this.Fotos = new clsFotos(this);
                this.Infraestructura = new clsInfraestructura_CRN(this);
                this.Instalaciones = new clsInstalacion_CRN(this);
                this.Latitud = 0;
                this.Longitud = 0;
                this.NoDeCedulaInfonavit = string.Empty;
                this.NoDeNiveles = 0;
                this.NoDeRecamaras = 0;
                this.NoDeVivienda = 0;
                this.NombreConjunto = string.Empty;
                this.ObraNegra = new clsObraNegra_CRN(this);
                this.Propietario = new clsPersona_CRN("PRO", objAvaluo);
                this.NoPaqueteInfonavit = string.Empty;
                this.RegimenDePropiedad = string.Empty;
                this.Revestimiento = new clsRevestimiento_CRN(this);
                this.TipoInmueble = string.Empty;
                this.Terreno = new clsTerreno_CRN(this);
                this.SegundaUbicacion = new clsDireccion_CRN("ALT", objAvaluo);
                this.UbicacionDelInmueble = new clsDireccion_CRN("INM", objAvaluo);
                this.ZonasDeRiesgo = new clsZonaDeRiesgo_CRN(this);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, e.Source, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            

            #region De Equipamento
            this.EquipamentoIglesia = new clsEquipamento_CRN(this, "Iglesia");
            this.EquipamentoMercados = new clsEquipamento_CRN(this, "Mercados");
            this.EquipamentoPlazasPub = new clsEquipamento_CRN(this, "Plazas Publicas");
            this.PlazasJardines = new clsEquipamento_CRN(this, "Plazas y Jardines");
            this.Escuelas = new clsEquipamento_CRN(this, "Escuelas");
            this.Hospitales = new clsEquipamento_CRN(this, "Hospitales");
            this.Bancos = new clsEquipamento_CRN(this, "Bancos");
            this.EstacionTransporte = new clsEquipamento_CRN(this, "Estacion de Transpor");
            #endregion
        }

        #region Metodos
        public bool Guardar()
        {
            if (DatosValidos())
            {
                if (this.EsNuevo)
                    return CreaInmueble();
                else
                {
                    if (this.EsModificado)
                        return ActualizaInmueble();
                    else
                        return EliminaInmueble();
                }
            }
            return false;
        }

        private bool EliminaInmueble()
        {
            clsInmueble_CD objInmueble = new clsInmueble_CD();
            return objInmueble.EliminaInmueble(this);
        }

        private bool ActualizaInmueble()
        {
            clsInmueble_CD objInmueble = new clsInmueble_CD();
            if (objInmueble.ModificarInmueble(this))
            {
                this.Propietario.Guardar();
                this.UbicacionDelInmueble.Guardar();
                this.SegundaUbicacion.Guardar();
                this.DireccionPropietario.Guardar();
                this.Entorno.Guardar();
                this.Infraestructura.Guardar();
                this.EquipamentoIglesia.Guardar();
                this.EquipamentoMercados.Guardar();
                this.EquipamentoPlazasPub.Guardar();
                this.Escuelas.Guardar();
                this.EstacionTransporte.Guardar();
                this.Hospitales.Guardar();
                this.PlazasJardines.Guardar();
                this.Bancos.Guardar();
                this.Terreno.Guardar();
                this.ZonasDeRiesgo.Guardar();
                this.DescripcionGeneral.Guardar();
                this.ObraNegra.Guardar();
                this.Revestimiento.Guardar();
                this.Instalaciones.Guardar();
                this.EnfoqueDeMercado.Guardar();
                this.Fotos.Guardar();
                this.Dictamen.Guardar();
                return true;
            }
            return false;
        }

        private bool CreaInmueble()
        {
            clsInmueble_CD objInmueble = new clsInmueble_CD();
            if (objInmueble.CreaInmueble(this))
            {
                this.EsModificado = true;
                this.Propietario.Guardar();
                this.UbicacionDelInmueble.Guardar();
                this.SegundaUbicacion.Guardar();
                this.DireccionPropietario.Guardar();
                this.Entorno.Guardar();
                this.Infraestructura.Guardar();
                this.EquipamentoIglesia.Guardar();
                this.EquipamentoMercados.Guardar();
                this.EquipamentoPlazasPub.Guardar();
                this.Escuelas.Guardar();
                this.EstacionTransporte.Guardar();
                this.Hospitales.Guardar();
                this.PlazasJardines.Guardar();
                this.Bancos.Guardar();
                this.Terreno.Guardar();
                this.ZonasDeRiesgo.Guardar();
                this.DescripcionGeneral.Guardar();
                this.ObraNegra.Guardar();
                this.Revestimiento.Guardar();
                this.Instalaciones.Guardar();
                this.EnfoqueDeMercado.Guardar();
                this.Fotos.Guardar();
                this.Dictamen.Guardar();
                return true;
            }
            return false;
        }
   

        public void ConvertirANuevo()
        {
            this.EsNuevo = true;
            this.UbicacionDelInmueble = new clsDireccion_CRN("INM", this.Avaluo);
            this.SegundaUbicacion.EsNuevo = true;
            this.Propietario.EsNuevo = true;
            this.DireccionPropietario.EsNuevo = true;
            this.Entorno.ConvertirANuevo();
            this.Infraestructura.ConvertirANuevo();
            this.Instalaciones.EsNuevo = true;
            this.Terreno.ConvertirANuevo();
            this.ZonasDeRiesgo.EsNuevo = true;
            this.DescripcionGeneral.EsNuevo = true;
            this.ObraNegra.EsNuevo = true;
            this.Revestimiento.EsNuevo = true;
            this.EnfoqueDeMercado.ConvertirANuevo();
            this.Fotos = new clsFotos(this);
            this.Dictamen.EsNuevo = true;
            this.CUVivienda = string.Empty;
        }

        public bool DatosValidos()
        {
            return true;
        }

        public static clsInmueble_CRN RecuperaInmuebleDeAvaluo(clsAvaluo_CRN objAvaluo)
        {
            clsInmueble_CRN objInmueble = new clsInmueble_CRN(objAvaluo);
            clsInmueble_CD inmueble_CD = new clsInmueble_CD();
            dsInmoviliario.InmuebleRow objInmuebleRecuperado = inmueble_CD.RecuperaInmueble(objAvaluo.IdAvaluo);
            if (objInmuebleRecuperado != null)
            {
                objInmueble.Altitud = objInmuebleRecuperado.Altitud;
                objInmueble.ClaseInmueble = objInmuebleRecuperado.ClaseInmueble;
                objInmueble.ClaveCatastral = objInmuebleRecuperado.ClaveCatastral;
                objInmueble.Constructor = objInmuebleRecuperado.Constructor;
                objInmueble.CuentaAgua = objInmuebleRecuperado.CuentaAgua;
                objInmueble.CuentaPredial = objInmuebleRecuperado.CuentaPredial;
                objInmueble.CUVivienda = objInmuebleRecuperado.CUVivienda;
                objInmueble.EsModificado = true;
                objInmueble.Estado = objInmuebleRecuperado.Estado;
                objInmueble.Latitud = objInmuebleRecuperado.Latitud;
                objInmueble.Longitud = objInmuebleRecuperado.Longitud;
                objInmueble.NoDeCedulaInfonavit = objInmuebleRecuperado.NoDeCedulaInfonavit;
                objInmueble.NoDeNiveles=objInmuebleRecuperado.NoDeNiveles;
                objInmueble.NoDeRecamaras = objInmuebleRecuperado.NoDeRecamaras;
                objInmueble.NoDeVivienda = objInmuebleRecuperado.NoDeVivienda;
                objInmueble.NombreConjunto = objInmuebleRecuperado.NombreConjunto;
                objInmueble.RegimenDePropiedad = objInmuebleRecuperado.RegimenDePropiedad;
                objInmueble.ClasificacionGral = objInmuebleRecuperado.ClasificacionGral;
                objInmueble.NoPaqueteInfonavit = objInmuebleRecuperado.NoPaqueteInfonavit;
                objInmueble.TipoInmueble = objInmuebleRecuperado.TipoInmueble;
                objInmueble.DireccionPropietario = clsDireccion_CRN.RecuperaDireccion(objAvaluo, "PRO");
                objInmueble.Propietario = clsPersona_CRN.RecuperaPersona(objAvaluo, "PRO");
                objInmueble.UbicacionDelInmueble = clsDireccion_CRN.RecuperaDireccion(objAvaluo, "INM");
                objInmueble.SegundaUbicacion = clsDireccion_CRN.RecuperaDireccion(objAvaluo, "ALT");
                objInmueble.Entorno = clsEntorno_CRN.RecuperaEntorno(objInmueble);
                objInmueble.Infraestructura = clsInfraestructura_CRN.RecuperaInfraestructura(objInmueble);
                objInmueble.EquipamentoIglesia = clsEquipamento_CRN.RecuperaEquipamento(objInmueble, "Iglesia");
                objInmueble.EquipamentoMercados = clsEquipamento_CRN.RecuperaEquipamento(objInmueble, "Mercados");
                objInmueble.EquipamentoPlazasPub = clsEquipamento_CRN.RecuperaEquipamento(objInmueble, "Plazas Publicas");
                objInmueble.Escuelas = clsEquipamento_CRN.RecuperaEquipamento(objInmueble, "Escuelas");
                objInmueble.EstacionTransporte = clsEquipamento_CRN.RecuperaEquipamento(objInmueble, "Estacion de Transporte");
                objInmueble.Hospitales = clsEquipamento_CRN.RecuperaEquipamento(objInmueble, "Hospitales");
                objInmueble.PlazasJardines = clsEquipamento_CRN.RecuperaEquipamento(objInmueble, "Plazas y Jardines");
                objInmueble.Bancos = clsEquipamento_CRN.RecuperaEquipamento(objInmueble, "Bancos");
                objInmueble.Terreno = clsTerreno_CRN.RecuperaTerreno(objInmueble);
                objInmueble.ZonasDeRiesgo = clsZonaDeRiesgo_CRN.RecuperaZonaDeRiesgo(objInmueble);
                objInmueble.DescripcionGeneral = clsDescripcionGeneral_CRN.RecuperaDescripcion(objInmueble);
                objInmueble.ObraNegra = clsObraNegra_CRN.RecuperaObraNegra(objInmueble);
                objInmueble.Revestimiento = clsRevestimiento_CRN.RecuperaRevestimiento(objInmueble);
                objInmueble.Instalaciones = clsInstalacion_CRN.RecupreraInstalacion(objInmueble);
                objInmueble.EnfoqueDeMercado = clsEnfoqueDeMercado_CRN.RecuperaEnfoqueDeMercado(objInmueble);
                objInmueble.Fotos = clsFotos.RecuperaFotoDeAvaluo(objInmueble);
                objInmueble.Dictamen = clsDictamen_CRN.RecuperaDictamenDeInmueble(objInmueble);
            }
            return objInmueble;
        }
        #endregion
    }
}
